Unknown properties handle করা গাইড ও নোট

Java Technologies - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - @JsonIgnoreProperties এবং Ignore Unknown Properties
223

Jackson-এ Unknown Properties Handling একটি গুরুত্বপূর্ণ বিষয়, বিশেষত যখন JSON ডেটা অপ্রত্যাশিত বা অজানা ফিল্ড সম্বলিত থাকে। যদি Jackson JSON ডেটা থেকে অজানা ফিল্ডগুলোকে অগ্রাহ্য না করে, তবে UnrecognizedPropertyException ঘটতে পারে।

Jackson এ JSON ডেটার সাথে সামঞ্জস্য রাখতে এবং অজানা প্রোপার্টি সমাধান করতে কয়েকটি অ্যানোটেশন এবং কনফিগারেশন রয়েছে। নিচে @JsonIgnoreProperties এবং @JsonAnySetter অ্যানোটেশন ব্যবহার করে কীভাবে অজানা প্রোপার্টি হ্যান্ডল করা যায় তা বিস্তারিত আলোচনা করা হলো।


1. @JsonIgnoreProperties Annotation

@JsonIgnoreProperties অ্যানোটেশন ব্যবহার করা হয়, যখন JSON ডেটার মধ্যে অজানা প্রোপার্টি থাকে এবং আপনি সেগুলোকে JSON Serialization/Deserialization-এ অগ্রাহ্য করতে চান।

ব্যবহার:

  • ignoreUnknown = true: Jackson অজানা প্রোপার্টিগুলো উপেক্ষা করবে।

Java Class Example:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnorePropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\"}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);

        System.out.println("User ID: " + user.getId());
        System.out.println("User Name: " + user.getName());
    }
}

Output:

User ID: 1
User Name: Rahim

এখানে, email ফিল্ডটি User ক্লাসে উপস্থিত না হলেও Jackson সেটি উপেক্ষা করবে কারণ @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করা হয়েছে।


2. @JsonAnySetter Annotation

@JsonAnySetter অ্যানোটেশন ব্যবহার করা হয়, যখন আপনি JSON ডেটার অজানা ফিল্ডগুলোকে একটি Map এ সেট করতে চান। এটি খুবই উপকারী যখন JSON ডেটাতে অতিরিক্ত প্রোপার্টি থাকতে পারে, এবং আপনি সেগুলোকে একটি ডাইনামিক ডেটা স্ট্রাকচারে সংরক্ষণ করতে চান।

ব্যবহার:

  • JSON ডেটার অজানা ফিল্ডগুলো একটি Map<String, Object> এ সেট করা হয়।

Java Class Example:

import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;

public class User {
    private int id;
    private String name;
    
    private Map<String, Object> otherProperties = new HashMap<>();

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @JsonAnySetter
    public void setOtherProperties(String key, Object value) {
        this.otherProperties.put(key, value);
    }

    public Map<String, Object> getOtherProperties() {
        return otherProperties;
    }
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonAnySetterExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\", \"address\":\"123 Street\"}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);

        System.out.println("User ID: " + user.getId());
        System.out.println("User Name: " + user.getName());
        System.out.println("Other Properties: " + user.getOtherProperties());
    }
}

Output:

User ID: 1
User Name: Rahim
Other Properties: {email=rahim@example.com, address=123 Street}

এখানে, email এবং address প্রোপার্টি User ক্লাসে নেই, তবে এগুলো otherProperties মেপে সংরক্ষণ করা হয়েছে।


3. ObjectMapper Configuration

Jackson ObjectMapper-এ FAIL_ON_UNKNOWN_PROPERTIES কনফিগারেশন সেট করে আপনি অজানা প্রোপার্টি গুলি উপেক্ষা করতে পারেন।

Java Class Example:

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ObjectMapperIgnoreUnknown {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\"}";

        ObjectMapper mapper = new ObjectMapper();
        // Configure ObjectMapper to ignore unknown properties
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        User user = mapper.readValue(json, User.class);

        System.out.println("User ID: " + user.getId());
        System.out.println("User Name: " + user.getName());
    }
}

Output:

User ID: 1
User Name: Rahim

এখানে, email ফিল্ডটি User ক্লাসে উপস্থিত না হলেও Jackson সেটি উপেক্ষা করে এবং কোডটি সঠিকভাবে কাজ করে।


@JsonIgnoreProperties এবং @JsonAnySetter এর মধ্যে পার্থক্য

বৈশিষ্ট্য@JsonIgnoreProperties@JsonAnySetter
ফোকাসঅজানা প্রোপার্টি গুলি উপেক্ষা করাঅজানা প্রোপার্টি গুলি একটি Map এ সেট করা
ব্যবহারসমস্ত অজানা প্রোপার্টি উপেক্ষা করতেJSON এর অজানা প্রোপার্টি একটি ডাইনামিক স্ট্রাকচারে সংরক্ষণ করা
ক্যাপচারশুধুমাত্র অজানা প্রোপার্টি উপেক্ষা করা হয়অজানা প্রোপার্টি Map বা List-এ ক্যাপচার করা হয়

  1. @JsonIgnoreProperties ব্যবহৃত হয় যখন আপনি JSON থেকে অজানা প্রোপার্টি উপেক্ষা করতে চান, যেমন পুরনো বা অবাঞ্ছিত ফিল্ড।
  2. @JsonAnySetter ব্যবহৃত হয় যখন আপনি JSON এর অজানা ফিল্ডগুলোকে একটি ডাইনামিক ডেটা স্ট্রাকচার (যেমন: Map) এ সংরক্ষণ করতে চান।
  3. ObjectMapper কনফিগারেশনের মাধ্যমে আপনি JSON Parsing-এ অজানা প্রোপার্টি গুলি উপেক্ষা করতে পারেন।

এই অ্যানোটেশনগুলি আপনাকে JSON ডেটা প্রক্রিয়াকরণের ক্ষেত্রে আরও নমনীয়তা এবং সঠিকতা প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...